package com.taotao.job.rpc.invoker.caller;

import com.taotao.job.rpc.core.meta.IfaceMeta;
import com.taotao.job.rpc.invoker.RpcRemoteException;

/**
 * 远程调用逻辑
 *
 * @author fanbeibei
 * @date 2020/10/31 22:20
 */
public interface RemoteCaller {
    /**
     * 远程调用的逻辑
     *
     * @param address           地址（例如：127.0.0.1:8888）
     * @param ifaceMeta         执行接口的元数据
     * @param args              参数
     * @param expectResultClass 期望
     * @param timeoutMillis     超时时间
     * @return
     * @throws RpcRemoteException
     */
    <T> T callRemote(String address, IfaceMeta ifaceMeta, Object[] args, Class<T> expectResultClass, long timeoutMillis) throws RpcRemoteException;
}
